iT邦幫忙

2022 iThome 鐵人賽

DAY 8
1

過度使用時,邏輯的美將索然無味。

Edward John Moreton Drax Plunkett

接下來這幾天,我們將看看另一個充斥雷區的主題:控制流程(control flows)。控制流程在是解釋器如何從上至下運行你的程式代碼。

有一些陳述句statements和操作符operators可以改變控制流程。它們是所有編程語言中常見的:loopif-elseswitchfunction callsternary等等。

在這兩天,我們先來看看Guard Clauses。

Guard Clauses

我們先來看看,維基百科的解釋:

在電腦程式設計中,衛(guard)是布爾表達式,其結果必須為真,程序才能執行下去。衛語句(guard code或guard clause)用於檢查先決條件。

我們來看一個例子getValidBoy:給一群人的資訊,與特定名字,判斷其是否為男生。是的話返回該人資料,否則是undefined。

// 比較會被主管討厭的寫法
function getValidBoy(name, people) {
    if (name) {
        const person = people.find(
            (person) => person.name === name
        );
        
        if (person) {
            const isMale = person.sex === "male";
            
            if (isMale) {
                return person;
            }
        }
    }
}

顯而易見的,雖然上述邏輯合理,但有多個嵌套if條件句(有三個!),造成閱讀代碼的心力成本大幅提高。我們可以使用guard clauses來解決上述問題。

// 比較不會被主管討厭的寫法
function getValidBoy(name, people) {
    if (!name) {
        return;
    }
    
    const person = people.find(
        (person) => person.name === name
    );
    
    if (!person) {
        return;
    }
            
    const isMale = person.sex === "male";
            
    if (!isMale) {
        return;
    }
    
    return person;    
}

在這裡,我們攤平了所有嵌套的條件句。我們可以發現每次檢查東西是否有問題時,我們就設立斷點或是衛。

它們阻止函數繼續執行,也就是在衛語句條件沒有滿足的情況下提前返回。


上一篇
昆蟲學家:Console
下一篇
分手:Else
系列文
被討厭的前端實務手冊|JS x TS x React18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Oo_花之舞__oO
iT邦新手 1 級 ‧ 2023-03-25 15:31:11

神級好文 前端必看 看了會變強

我要留言

立即登入留言